﻿#include<iostream>
using namespace std;

struct Role {
	int hp;
	int mp;
};

using usingFadd = char(*)(int, int);//自定义数据类型
typedef char(*typedefAdd)(int, int);//自定义数据类型
using pRole = int(*)(int hp, int mp);
int Add(int a, int b) {
	return a + b;
}
float AddX(int a, int b) {
	return (a + b) / 2;
}
int Exp(Role rl) {
	return rl.hp + rl.mp;
}

int Test(int a, int b, pRole x) {
	return x(a, b);//指定函数处理
}

int main() {
	int(*pAdd)(int, int) { Add };//申明函数指针

	char(*pAddX)(int, int) { (char(*)(int, int))AddX };//强转类型
	typedefAdd pAddXX{ (typedefAdd)AddX };//typedef，使用自定义数据类型，与上一条一样
	usingFadd pAdd1{ (usingFadd)AddX };//using

	cout << "1 " << sizeof(pAdd) << endl;//8

	cout << pAdd(1, 2) << endl;//3

	cout << pAddX(110, 20) << endl;//A

	cout << "1 " << sizeof(pRole) << endl;//8

	Role rl{ 100,350 };
	pRole pExp = (pRole)Exp;
	//cout << Exp(rl) << endl;
	cout << pExp(100, 350) << endl;//x86才能正常，x64的话结构体参数第二位读取不了

	cout << Test(120, 234, Add);
}